/**
 * Object EList()
 * 
 * @super AElement
 * @constructor
 * @author Hermann D. Schimpf <hschimpf@gschimpf.com>
 * @license http://opensource.org/licenses/gpl-2.0.php
 * @date 2010-08-14
 * @version 0.1.0
 */
function EList() {
	/* ejecutamos el constructor */
	return this.__construct();
}
/* heredamos las propiedades */
EList.prototype = new AElement;
/**
 * Constructor de la clase
 */
EList.prototype.__construct = function() {
	/* llamamos al metodo constructor del padre */
	var obj = this._construct('SELECT');
	/* creamos un puntero al objeto actual */
	var me = this;
	/* agregamos el evento onChange */
	obj.addEventListener('change', function() {
		/* actualizamos */
		me.actionPerformed('change');
		/* actualizamos las opciones */
		me.updateOptions();
	}, false);
	/* seteamos el tipo a lista */
	obj.multiple = true;
	/* retornamos el objeto creado */
	return obj;
};
/**
 * Retorna la definicion de la clase
 * 
 * @return String Definicion de la clase
 */
EList.prototype.toString = function() {
	/* retornamos la definicion de la clase en un string */
	return "[EList " + this.getName() | this.getID() + "]";
};
/**
 * Setea el tamano de la lista
 */
EList.prototype.setSize = function(size) {
	/* seteamos el tamano de la lista */
	this.size = size;
};
/**
 * Retorna el elemento seleccionado
 * 
 * @return EOption Elemento seleccionado
 */
EList.prototype.getSelected = function() {
	/* recorremos las opciones */
	for ( var i in this.getObject().options) {
		/* verificamos si es el que esta seleccionado */
		if (this.getObject().options[i].selected === true)
			/* retornamos el elemento */
			return this.getObject().options[i];
	}
	/* si llegamos retornamos false */
	return false;
};
/**
 * Agrega una opcion al la lista
 * 
 * @param String Valor para la opcion
 * @param String Texto para la opcion
 */
EList.prototype.addOption = function(value, text) {
	/* creamos el elemento EOption */
	var opt = new EOption;
	/* seteamos el value */
	opt.setValue(value);
	/* seteamos el texto */
	opt.setText(text);
	/* agregamos la opcion localmente */
	this.getObject().add(opt, null);
	/* seteamos el color de fondo de la opcion */
	opt.getObject().style.backgroundColor = this.isMandatory() ? '#F99' : '#FFF';
	/* retornamos true */
	return true;
};
/**
 * Actualiza el fondo de las opciones
 */
EList.prototype.updateOptions = function() {
	/* creamos una bandera */
	existsSelected = false;
	/* recorremos las opciones */
	for ( var i in this.getObject().options) {
		/* obtenemos el objeto */
		var obj = this.getObject().options[i];
		/* verificamos si es una opcion */
		if (obj.selected !== undefined && obj.selected == true) {
			/* modificamos la bandera */
			existsSelected = true;
			/* salimos del bucle */
			break;
		}
	}
	/* recorremos las opciones */
	for (i in this.getObject().options) {
		/* obtenemos el objeto */
		obj = this.getObject().options[i];
		/* verificamos si es una opcion */
		if (obj.selected !== undefined)
			/* actualizamos el fondo */
			obj.getObject().style.backgroundColor = existsSelected ? '#FFF' : '#F99';
	}
};
/**
 * Elimina una opcion de la lista
 * 
 * @param Integer Posicion a eliminar
 * @return Boolean True si se elimino la opcion
 */
EList.prototype.delOption = function(pos) {
	/* verificamos si existe la opcion */
	if (pos * 1 != NaN && this.getObject().options[pos] !== undefined && pos > 0) {
		/* eliminamos la opcion del combo */
		this.getObject().remove(pos);
		/* retornamos teue */
		return true;
	}
	/* retornamos false */
	return false;
};
/**
 * Elimina una opcion de la lista
 * 
 * @param String Valor de la opcion a eliminar
 * @return Boolean True si se elimino la opcion
 */
EList.prototype.delOptionValue = function(value) {
	/* recorremos las opciones */
	for ( var i in this.getObject().options)
		/* verificamos si es la opcion a eliminar */
		if (i * 1 != NaN && this.getObject().options[i].value == value) {
			/* eliminamos la opcion */
			this.getObject().remove(i);
			/* retornamos teue */
			return true;
		}
	/* retornamos false */
	return false;
};